﻿using Microsoft.Office.Interop.PowerPoint;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace An_Im.Extension.Contract
{
    /// <summary>
    /// 命令执行委托类型。
    /// </summary>
    public delegate void CommandExecuteHandler(Application application, IList<ParaNameValuePair> paralist);

    /// <summary>
    /// 命令接口。
    /// </summary>
    public interface IAnImCommand
    {
        /// <summary>
        /// 命令的名称。
        /// </summary>
        string Name { get; }

        /// <summary>
        /// 命令的描述。
        /// </summary>
        string Description { get; }

        /// <summary>
        /// 默认的命令的参数列表。
        /// </summary>
        IList<ParaNameValuePair> DefaultParas { get; }

        /// <summary>
        /// 命令执行的委托。
        /// </summary>
        CommandExecuteHandler CommandExecuteMethod { get; }

        /// <summary>
        /// 是否可以导出 VBA 代码。
        /// </summary>
        bool VBAExportable { get; }

        /// <summary>
        /// 导出 VBA 代码。
        /// </summary>
        /// <returns></returns>
        string ExportVBACode();

        /// <summary>
        /// 导出 VBA 代码。
        /// </summary>
        /// <returns></returns>
        string ExportVBACode(IList<ParaNameValuePair> customParas);

        /// <summary>
        /// 是否可以导出 VBS 代码。
        /// </summary>
        bool VBSExportable { get; }


        /// <summary>
        /// 导出 VBS 代码。
        /// </summary>
        /// <returns></returns>
        string ExportVBSCode();

        /// <summary>
        /// 导出 VBS 代码。
        /// </summary>
        /// <returns></returns>
        string ExportVBSCode(IList<ParaNameValuePair> customParas);

        /// <summary>
        /// 是否可以导出 PowerShell 代码。
        /// </summary>
        bool PowerShellExportable { get; }

        /// <summary>
        /// 导出 VBA 代码。
        /// </summary>
        /// <returns></returns>
        string ExportPowerShellCode();

        string ExportPowerShellCode(IList<ParaNameValuePair> customParas);

        /// <summary>
        /// 执行。
        /// </summary>
        void Excute(Application app);

        /// <summary>
        /// 执行。
        /// </summary>
        void Excute(Application app, IList<ParaNameValuePair> paras);

        /// <summary>
        /// 插件源。
        /// </summary>
        IExtend AddIn { get; set; }

        
    }
}
